let url='http://localhost:8080/index.html?time=2018-01-09&title&a=1&b=2&a=2&a=7&d=323';
function parseUrl(url) {
    if (url) url = decodeURIComponent(url);
    let result;

    if (url.indexOf('?') !== '-1') {
        result=url.substr(url.indexOf('?')+1).split('&').reduce((o,value)=>{
            let [key,val]=value.split('=');
            if(o.hasOwnProperty(key)){
                o[key]=Array.isArray(o[key])?[...o[key],val]:[o[key],val]
            }else {
                o[key]=val
            }
            return o;
        },{})

    }else{
        result={}
    }
    console.log(result);
    return result;

};
parseUrl(url);

const unique = (array) => {
    let obj = {}
    return array.filter((item, index) => {
        // 防止key重复
        let newItem = item + JSON.stringify(item);
        return obj.hasOwnProperty(newItem) ? false : obj[newItem] = true
    })
}

console.log(unique([1,1,'1',"a", "a", 0, 0, {}, {}, {a: 1}, {a: 1}, [], [], [1], [1], null, null, undefined, undefined, /\.js$/, /\.js$/]));



// 获取argument对象 类数组对象 不能调用数组方法
function test1() {
    console.log('1获取argument对象 类数组对象 不能调用数组方法', arguments);
}

// 获取参数数组  可以调用数组方法
function test2(...args) {
    console.log('2获取参数数组  可以调用数组方法', args);
}

// 获取除第一个参数的剩余参数数组
function test3(first, ...args) {
    console.log('3获取argument对象 类数组对象 不能调用数组方法', args);
}

// 透传参数
function test4(first, ...args) {
    fn(...args);
    fn(...arguments);
}

function fn() {
    console.log('4透传', ...arguments);
}

test1(1, 2, 3);
test2(1, 2, 3);
test3(1, 2, 3);
test4(1, 2, 3);

function currying(fn, ...args) {
    if (args.length >= fn.length) {
        return fn(...args);
    } else {
        return (...args2) => currying(fn, ...args, ...args2);
    }
}